﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SalaDeEnsayo.WebApplication.SecurityAttributes;
using SalaDeEnsayo.ApplicationService;
using SalaDeEnsayo.ApplicationService.Model.Entity;

namespace SalaDeEnsayo.WebApplication
{
    //[RolUsuario]
    //[RolAdminSistema]
    public partial class AdministracionGrupos : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindGrid();
                CargarDropDownList();
                CleanControls();
            }
        }

        #region [ Metodos privados ]
        
        private void BindGrid()
        {
            GrupoService grupoS = new GrupoService();
            grdGrupo.DataSource = grupoS.Listar(null);
            grdGrupo.DataBind();
        }
        private void BindGrid(string filtro)
        {
            GrupoService grupoS = new GrupoService();
            grdGrupo.DataSource = grupoS.Listar(filtro);
            grdGrupo.DataBind();
        }

        private void CleanControls()
        {
            txtCantidad.Text = string.Empty;
            txtNombre.Text = string.Empty;
            txtIdGrupo.Text = string.Empty;
            txtIntegrantes.Text = string.Empty;
            ddlEstilo.SelectedIndex = -1;

            txtCantidad.Enabled = false;
            txtNombre.Enabled = false;
            txtIdGrupo.Enabled = false;
            txtIntegrantes.Enabled = false;
            ddlEstilo.Enabled = false;

            btnActualizar.Visible = false;
            btnCancelar.Visible = false;
            btnConfirmEliminar.Visible = false;
            btnGuardar.Visible = false;

            lblValCantidad.Visible = false;
            lblValIntegrantes.Visible = false;
            lblValNombre.Visible = false;
            lblValEstilo.Visible = false;
            lblDependencia.Visible = false;
                        
        }
        private void ActivateControls()
        {
            txtCantidad.Enabled = true;
            txtNombre.Enabled = true;
            txtIntegrantes.Enabled = true;
            ddlEstilo.Enabled = true; 
        }

        private void CargarDropDownList()
        {
            EstiloService estiloS = new EstiloService();
            List<Estilo> listaEstilos = estiloS.ObtenerTodos();
            ddlEstilo.Items.Clear();
            ddlEstilo.Items.Add(new ListItem("--Seleccione--", "0"));
            ddlEstilo.Items.AddRange(listaEstilos.Select(e=>new ListItem(e.Descripcion,e.Id.ToString())).ToArray());
        }

        private void CargarCamposGrupo(Grupo grupo)
        {
            if (grupo == null)
                return;

            txtIdGrupo.Text = grupo.Id.ToString();
            txtNombre.Text = grupo.Nombre_grupo;
            ddlEstilo.SelectedValue = grupo.Estilo.ToString();
            txtCantidad.Text = grupo.CantidadIntegrantes.ToString();
            txtIntegrantes.Text = grupo.Integrantes;
        }

        #endregion

        protected void grdGrupo_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdGrupo.PageIndex = e.NewPageIndex;
            BindGrid();
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {
            string[]var = ((ImageButton)sender).CommandArgument.Split(';');
            GrupoService grupoS = new GrupoService();
            CargarCamposGrupo(grupoS.ObtenerPorId(long.Parse(var[0])));
            
            btnGuardar.Visible = false;
            btnActualizar.Visible = true;
            btnConfirmEliminar.Visible = false;
            btnCancelar.Visible = true;
            ActivateControls();

        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {
            string[] var = ((ImageButton)sender).CommandArgument.Split(';');
            GrupoService grupoS = new GrupoService();

            if (grupoS.TieneDependencias(long.Parse(var[0])))
            {
                lblDependencia.Visible = true;
            }

            CargarCamposGrupo(grupoS.ObtenerPorId(long.Parse(var[0])));

            btnGuardar.Visible = false;
            btnActualizar.Visible = false;
            btnConfirmEliminar.Visible = true;
            btnCancelar.Visible = true;
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            GrupoService grupoS = new GrupoService();
            Grupo newGrupo = new Grupo();

            if (txtNombre.Text.Trim() == "")
            {
                lblValNombre.Visible = true;
            }
            else { lblValNombre.Visible = false; }
            if (txtIntegrantes.Text.Trim() == "")
            {
                lblValIntegrantes.Visible = true;
            }
            else { lblValIntegrantes.Visible = false; }
            if (txtCantidad.Text == "")
            {
                lblValCantidad.Visible = true;
            }
            else { lblValCantidad.Visible = false; }
            if (ddlEstilo.SelectedItem.Text == "--Seleccione--")
            {
                lblValEstilo.Visible = true;
            }
            else { lblValEstilo.Visible = false; }

            if (txtCantidad.Text.Trim() != "" && txtIntegrantes.Text.Trim() != "" && txtNombre.Text.Trim() != "" && ddlEstilo.SelectedItem.Text != "--Seleccione--")
            {

                if (grupoS.PuedeInsetar(txtNombre.Text))
                {
                    newGrupo.Nombre_grupo = txtNombre.Text.Trim();
                    newGrupo.Estilo = int.Parse(ddlEstilo.SelectedValue.ToString());
                    newGrupo.CantidadIntegrantes = int.Parse(txtCantidad.Text);
                    newGrupo.Integrantes = txtIntegrantes.Text.Trim();
                    if (grupoS.AgregarGrupo(newGrupo) != 0)
                    {
                        Master.ShowMessage("El grupo se agregó correctamente.");
                        BindGrid();
                        CleanControls();
                    }
                    else
                    {
                        Master.ShowError("Favor de corregir los datos ingresados y volver a intentar.");
                    }

                }
                else
                {
                    Master.ShowError("El grupo ingresado ya está registrado. Modifique el nombre");
                    txtNombre.Focus();
                }
                
            }
        }

        protected void btnActualizar_Click(object sender, EventArgs e)
        {
            GrupoService grupoS = new GrupoService();
            Grupo newGrupo = new Grupo();

            if (txtNombre.Text.Trim() == "")
            {
                lblValNombre.Visible = true;
            }
            else { lblValNombre.Visible = false; }
            if (txtIntegrantes.Text.Trim() == "")
            {
                lblValIntegrantes.Visible = true;
            }
            else { lblValIntegrantes.Visible = false; }
            if (txtCantidad.Text == "")
            {
                lblValCantidad.Visible = true;
            }
            else { lblValCantidad.Visible = false; }
            if (ddlEstilo.SelectedItem.Text == "--Seleccione--")
            {
                lblValEstilo.Visible = true;
            }
            else { lblValEstilo.Visible = false; }

            if (txtCantidad.Text.Trim() != "" && txtIntegrantes.Text.Trim() != "" && txtNombre.Text.Trim() != "" && ddlEstilo.SelectedItem.Text != "--Seleccione--")
            {
                newGrupo.Id = long.Parse(txtIdGrupo.Text);
                newGrupo.Nombre_grupo = txtNombre.Text.Trim();
                newGrupo.Estilo = int.Parse(ddlEstilo.SelectedValue.ToString());
                newGrupo.CantidadIntegrantes = int.Parse(txtCantidad.Text);
                newGrupo.Integrantes = txtIntegrantes.Text.Trim();
                if (grupoS.ModificarGrupo(newGrupo) != 0)
                {
                    Master.ShowMessage("El grupo se modificó correctamente.");
                    BindGrid();
                    CleanControls();
                }
                else
                {
                    Master.ShowError("Ocurrió un problema inesperado, por favor intente mas tarde.");
                }
            }
        }

        protected void btnConfirmEliminar_Click1(object sender, EventArgs e)
        {
            GrupoService grupoS = new GrupoService();
            ReservaService reservaS= new ReservaService();


            reservaS.EliminarReservasGrupoPost(long.Parse(txtIdGrupo.Text));
            reservaS.EliminarReservasGrupoPre(long.Parse(txtIdGrupo.Text));
            
                if (grupoS.EliminarGrupo(long.Parse(txtIdGrupo.Text)) != 0)
                {
                    Master.ShowMessage("El grupo se eliminó correctamente.");
                    BindGrid();
                    CleanControls();
                }
                else
                {
                    Master.ShowError("Ocurrió un problema inesperado, por favor intente mas tarde.");
                }

        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            btnGuardar.Visible = true;
            btnActualizar.Visible = false;
            btnConfirmEliminar.Visible = false;
            btnCancelar.Visible = true;
            ActivateControls();
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            CleanControls();
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            BindGrid(txtNombreSearch.Text);
        }

        protected void grdGrupo_SelectedIndexChanged(object sender, EventArgs e)
        {

        }


    }
}
